import { session } from 'js/util'
// import App from '../main'
import { apiQueryCustomerByStoreId } from 'js/api'

export default {
  state: {
    appkey: '43fe9b8de1d5f3934eebf713',
    secret: '2032ab56604aa09b109938eb',
    JIMVisible: false,
    JIMUserList: [],
    JIMTargetUser: session.get('jimuser') || {} // 当前聊天对象和客服信息
  },
  getters: {
    appkey: state => state.appkey,
    secret: state => state.secret,
    JIMVisible: state => state.JIMVisible,
    JIMUserList: state => state.JIMUserList,
    JIMTargetUser: state => state.JIMTargetUser
  },
  actions: {
    // JMessage初始化
    JIMInit({ state }, payload) {
      // 初始化数据  timestamp 时间戳 random_str 随机字符串 signature 签名，需md5加密
      const timestamp = (new Date()).valueOf()
      const randomStr = '022cd9fd995849b58b3ef0e943421ed9'
      const signature = md5(`appkey=${state.appkey}&timestamp=${timestamp}&random_str=${randomStr}&key=${state.secret}`)

      // 初始化
      JIM.init({
        'appkey': state.appkey,
        'random_str': randomStr,
        'signature': signature,
        'timestamp': timestamp,
        'flag': 1
      }).onSuccess(data => {
        // 初始化成功的时候，需要去进行操作
        payload.onSuccess && payload.onSuccess(data)
      })
    },
    // 打开聊天时，判断是否满足聊天条件
    // JIMIsChatAuth({ state }, payload) {
    //   // 获取token
    //   const userInfo = session.get('userInfo')
    //   const token = userInfo && userInfo.accessToken
    //   // token存在操作
    //   if (token) {
    //     // 判断用户角色
    //     App.$store.dispatch('fetchUserRole', {
    //       token: token,
    //       callback(data) {
    //         // 状态为2是采购商
    //         if (data == 2) {
    //           // 判断是否已经init
    //           if (!JIM.isInit()) {
    //             App.$store.dispatch('JIMInit', {
    //               onSuccess() {
    //                 App.$store.dispatch('JIMLogin', {
    //                   onSuccess() {
    //                     payload.onSuccess && payload.onSuccess()
    //                   }
    //                 })
    //               }
    //             })
    //           } else {
    //             // 如果init，则调用登录
    //             App.$store.dispatch('JIMLogin', {
    //               onSuccess() {
    //                 payload.onSuccess && payload.onSuccess()
    //               }
    //             })
    //           }
    //           // token不存在操作
    //         } else {
    //           // 不是采购商，则跳去申请页面
    //           App.$toast('您不是采购商，请升级为采购商才可以使用此功能', () => {
    //             App.$router.push('/my/extra')
    //           })
    //         }
    //       }
    //     })
    //   } else {
    //     App.$router.push('/login')
    //   }
    // },
    // 登录，获取会话列表，接收聊天信息
    // JIMLogin({ state, commit }, payload) {
    //   const userInfo = session.get('userInfo') || {}
    //   // JIM未登录，并且session保存了信息，则直接登录
    //   if (!JIM.isLogin() && userInfo.userName) {
    //     JIM.login({
    //       username: userInfo.userName,
    //       password: userInfo.userName
    //     }).onSuccess(data => {
    //       payload.onSuccess && payload.onSuccess()
    //       // 获取会话列表 聊天消息实时监听 离线消息监听
    //       // App.$store.dispatch('JIMConversationList')
    //       App.$store.dispatch('JIMReceiveMsg')
    //       App.$store.dispatch('JIMSyncMsg')
    //     })
    //     // JIM未登录，并且session没有保存信息，则跳登录页面
    //   } else if (!JIM.isLogin() && !userInfo.userName) {
    //     App.$router.push('/login')
    //     return
    //   } else if (JIM.isLogin()) {
    //     // 如果已经登录了，则调用此回调
    //     payload.onSuccess && payload.onSuccess()
    //     // 获取会话列表 聊天消息实时监听 离线消息监听
    //     // App.$store.dispatch('JIMConversationList')
    //     App.$store.dispatch('JIMReceiveMsg')
    //     App.$store.dispatch('JIMSyncMsg')
    //   }
    //   // 显示聊天框
    //   App.$store.commit('showJIMVisible')
    // },
    // 获取会话列表
    // JIMConversationList({ state, commit }) {
      // JIM.getConversation().onSuccess(data => {
      //   // 获取的会话列表，并存入JIMUserList中
      //   const userlist = data.conversations || []
      //   // 转化成需要的数据格式
      //   if (userlist.length) {
      //     const firstUser = userlist[0]
      //     apiChatQueryUserByAdminId(firstUser.username, firstUser.mtime).then(data => {
      //       data && (data.message = [])
      //       userlist[0] = Object.assign({}, userlist[0], data)
      //       state.JIMUserList = userlist
      //       commit('checkTargetUser', userlist[0])
      //     })
      //   }
      // })
    // }
    // 实时消息监听
    // JIMReceiveMsg({ state, commit }) {
    //   JIM.onMsgReceive(data => {
    //     const content = data.messages[0].content
    //     // 当有会话列表的情况下
    //     if (state.JIMUserList.length) {
    //       for (let i in state.JIMUserList) {
    //         const item = state.JIMUserList[i]
    //         if (item.adminId == content.from_id) {
    //           item.message.push(content.msg_body)
    //           break
    //         }
    //       }
    //     }
    //     // 聊天时，让滚动条始终在底部
    //     App.$store.commit('JIMScollToBottom')
    //   })
    // },
    // 离线消息监听
    // JIMSyncMsg({ state, commit }) {
    //   // 获取手机号码，toId
    //   const username = App.$store.getters.mobile
    //   JIM.onSyncConversation(data => {
    //     data = data || []
    //     // 处理过后的历史消息数组
    //     let aNewMsg = []
    //     // 遍历所有的历史用户
    //     data.forEach(amessage => {
    //       // 处理发送和接受的fromId
    //       const oSendInfo = amessage.msgs[0].content.msg_body.extras || {}
    //       let newSendInfo = {}
    //       if (oSendInfo.fromId == username) {
    //         newSendInfo = oSendInfo
    //       } else {
    //         newSendInfo = oSendInfo
    //         newSendInfo.toId = oSendInfo.fromId
    //         newSendInfo.toImg = oSendInfo.fromImg
    //         newSendInfo.toName = oSendInfo.fromName
    //         newSendInfo.fromId = oSendInfo.toId
    //         newSendInfo.fromImg = oSendInfo.toImg
    //         newSendInfo.fromName = oSendInfo.toName
    //       }
    //       // 处理后的对象
    //       let oMsg = {
    //         ...newSendInfo,
    //         adminId: amessage.msgs[0].content.from_id,
    //         message: [] // 插入的历史消息，和现在聊天所发送的消息
    //       }
    //       // 遍历用户下的所有信息，并处理成需要的格式
    //       amessage.msgs.forEach(msg => {
    //         if (msg.content.msg_body.extras && msg.content.msg_body.extras.fromId == username) {
    //           // 插入自己发送的消息
    //           oMsg.message.push({
    //             text: msg.content.msg_body.text,
    //             ident: true
    //           })
    //           return
    //         }
    //         // 插入对方的消息信息
    //         oMsg.message.push({
    //           text: msg.content.msg_body.text
    //         })
    //       })
    //       aNewMsg.push(oMsg)
    //     })
    //     // 判断是否存在
    //     const firstUser = state.JIMUserList[0] || {}
    //     const isExits = aNewMsg.some(user => {
    //       return user.adminId == firstUser.adminId
    //     })
    //     if (isExits) {
    //       let existUser = null
    //       aNewMsg.forEach((user, i) => {
    //         if (user.adminId == firstUser.adminId) {
    //           existUser = aNewMsg.splice(i, 1)
    //           return
    //         }
    //       })
    //       aNewMsg.unshift(existUser[0])
    //       state.JIMUserList = aNewMsg
    //     } else {
    //       state.JIMUserList = state.JIMUserList.concat(aNewMsg)
    //     }
    //     commit('checkTargetUser', state.JIMUserList[0])
    //     // 聊天时，让滚动条始终在底部
    //     App.$store.commit('JIMScollToBottom')
    //   })
    // },
    // 根据店铺Id获取客服信息
    fetchCustomerByStoreId({ state, commit }, payload) {
      apiQueryCustomerByStoreId(payload.storeId).then(data => {
        // 打开聊天框
        commit('showJIMVisible')
        data = data || {}
        // 发送者信息集合
        const fromUser = session.get('userInfo') || {}
        // 把取回的值，转化成发送消息时需要的格式
        const newUser = {
          fromName: fromUser.nickName, // 发送者名称
          fromImg: fromUser.userHeadImg, // 发送者头像
          fromId: fromUser.userName, // 发送者手机号
          adminId: data.adminId, // 平台创建ID
          storeId: data.storeId, // 店铺id
          goodsId: payload.goodsId || '', // 商品Id
          toName: data.storeName || '', // 接收者名称
          toImg: data.storeLogo, // 接收者头像
          toId: data.mobile, // 接收者手机号
          message: []
        }
        // 判断列表中是否有此用户
        if (state.JIMUserList.length) {
          const isExits = state.JIMUserList.some(user => {
            return user.adminId == newUser.adminId
          })
          if (isExits) {
            let existUser = null
            state.JIMUserList.forEach((user, i) => {
              if (user.adminId == newUser.adminId) {
                existUser = state.JIMUserList.splice(i, 1)
              }
            })
            state.JIMUserList.unshift(existUser[0])
            commit('checkTargetUser', state.JIMUserList[0])
          } else {
            state.JIMUserList.unshift(newUser)
            commit('checkTargetUser', newUser)
          }
        } else {
          state.JIMUserList.push(newUser)
        }
      })
    }
  },
  mutations: {
    // 隐藏聊天框
    hideJIMVisible(state) {
      state.JIMVisible = false
    },
    // 打开聊天框
    showJIMVisible(state) {
      state.JIMVisible = true
    },
    // 设置历史消息列表
    setJIMUserList(state, payload) {
      state.JIMUserList = payload
    },
    // 切换目标聊天用户
    checkTargetUser(state, payload) {
      state.JIMTargetUser = payload
    }
    // 聊天时，让滚动条始终在底部
    // JIMScollToBottom() {
    //   const chatBody = document.getElementById('chatBody')
    //   setTimeout(() => {
    //     chatBody.scrollTop = chatBody.scrollHeight
    //   }, 14)
    // }
  }
}
